{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# Machine Learning Pipeline - Model Training\n",
    "\n",
    "In this notebook, we pick up the transformed datasets and the selected variables that we saved in the previous notebooks."
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# Reproducibility: Setting the seed\n",
    "\n",
    "With the aim to ensure reproducibility between runs of the same notebook, but also between the research and production environment, for each step that includes some element of randomness, it is extremely important that we **set the seed**."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {},
   "outputs": [],
   "source": [
    "# to handle datasets\n",
    "import pandas as pd\n",
    "import numpy as np\n",
    "\n",
    "# for plotting\n",
    "import matplotlib.pyplot as plt\n",
    "\n",
    "# to save the model\n",
    "import joblib\n",
    "\n",
    "# to build the model\n",
    "from sklearn.linear_model import Lasso\n",
    "\n",
    "# to evaluate the model\n",
    "from sklearn.metrics import mean_squared_error, r2_score\n",
    "\n",
    "# to visualise al the columns in the dataframe\n",
    "pd.pandas.set_option('display.max_columns', None)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>MSSubClass</th>\n",
       "      <th>MSZoning</th>\n",
       "      <th>LotFrontage</th>\n",
       "      <th>LotArea</th>\n",
       "      <th>Street</th>\n",
       "      <th>Alley</th>\n",
       "      <th>LotShape</th>\n",
       "      <th>LandContour</th>\n",
       "      <th>Utilities</th>\n",
       "      <th>LotConfig</th>\n",
       "      <th>LandSlope</th>\n",
       "      <th>Neighborhood</th>\n",
       "      <th>Condition1</th>\n",
       "      <th>Condition2</th>\n",
       "      <th>BldgType</th>\n",
       "      <th>HouseStyle</th>\n",
       "      <th>OverallQual</th>\n",
       "      <th>OverallCond</th>\n",
       "      <th>YearBuilt</th>\n",
       "      <th>YearRemodAdd</th>\n",
       "      <th>RoofStyle</th>\n",
       "      <th>RoofMatl</th>\n",
       "      <th>Exterior1st</th>\n",
       "      <th>Exterior2nd</th>\n",
       "      <th>MasVnrType</th>\n",
       "      <th>MasVnrArea</th>\n",
       "      <th>ExterQual</th>\n",
       "      <th>ExterCond</th>\n",
       "      <th>Foundation</th>\n",
       "      <th>BsmtQual</th>\n",
       "      <th>BsmtCond</th>\n",
       "      <th>BsmtExposure</th>\n",
       "      <th>BsmtFinType1</th>\n",
       "      <th>BsmtFinSF1</th>\n",
       "      <th>BsmtFinType2</th>\n",
       "      <th>BsmtFinSF2</th>\n",
       "      <th>BsmtUnfSF</th>\n",
       "      <th>TotalBsmtSF</th>\n",
       "      <th>Heating</th>\n",
       "      <th>HeatingQC</th>\n",
       "      <th>CentralAir</th>\n",
       "      <th>Electrical</th>\n",
       "      <th>1stFlrSF</th>\n",
       "      <th>2ndFlrSF</th>\n",
       "      <th>LowQualFinSF</th>\n",
       "      <th>GrLivArea</th>\n",
       "      <th>BsmtFullBath</th>\n",
       "      <th>BsmtHalfBath</th>\n",
       "      <th>FullBath</th>\n",
       "      <th>HalfBath</th>\n",
       "      <th>BedroomAbvGr</th>\n",
       "      <th>KitchenAbvGr</th>\n",
       "      <th>KitchenQual</th>\n",
       "      <th>TotRmsAbvGrd</th>\n",
       "      <th>Functional</th>\n",
       "      <th>Fireplaces</th>\n",
       "      <th>FireplaceQu</th>\n",
       "      <th>GarageType</th>\n",
       "      <th>GarageYrBlt</th>\n",
       "      <th>GarageFinish</th>\n",
       "      <th>GarageCars</th>\n",
       "      <th>GarageArea</th>\n",
       "      <th>GarageQual</th>\n",
       "      <th>GarageCond</th>\n",
       "      <th>PavedDrive</th>\n",
       "      <th>WoodDeckSF</th>\n",
       "      <th>OpenPorchSF</th>\n",
       "      <th>EnclosedPorch</th>\n",
       "      <th>3SsnPorch</th>\n",
       "      <th>ScreenPorch</th>\n",
       "      <th>PoolArea</th>\n",
       "      <th>PoolQC</th>\n",
       "      <th>Fence</th>\n",
       "      <th>MiscFeature</th>\n",
       "      <th>MiscVal</th>\n",
       "      <th>MoSold</th>\n",
       "      <th>SaleType</th>\n",
       "      <th>SaleCondition</th>\n",
       "      <th>LotFrontage_na</th>\n",
       "      <th>MasVnrArea_na</th>\n",
       "      <th>GarageYrBlt_na</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>0.750000</td>\n",
       "      <td>0.75</td>\n",
       "      <td>0.461171</td>\n",
       "      <td>0.0</td>\n",
       "      <td>1.0</td>\n",
       "      <td>1.0</td>\n",
       "      <td>0.333333</td>\n",
       "      <td>1.000000</td>\n",
       "      <td>1.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.863636</td>\n",
       "      <td>0.4</td>\n",
       "      <td>1.0</td>\n",
       "      <td>0.75</td>\n",
       "      <td>0.6</td>\n",
       "      <td>0.777778</td>\n",
       "      <td>0.50</td>\n",
       "      <td>0.014706</td>\n",
       "      <td>0.049180</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>1.0</td>\n",
       "      <td>1.0</td>\n",
       "      <td>0.333333</td>\n",
       "      <td>0.00000</td>\n",
       "      <td>0.666667</td>\n",
       "      <td>0.5</td>\n",
       "      <td>1.0</td>\n",
       "      <td>0.666667</td>\n",
       "      <td>0.666667</td>\n",
       "      <td>0.666667</td>\n",
       "      <td>1.0</td>\n",
       "      <td>0.002835</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.673479</td>\n",
       "      <td>0.239935</td>\n",
       "      <td>1.0</td>\n",
       "      <td>1.00</td>\n",
       "      <td>1.0</td>\n",
       "      <td>1.0</td>\n",
       "      <td>0.559760</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.523250</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.666667</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.375</td>\n",
       "      <td>0.333333</td>\n",
       "      <td>0.666667</td>\n",
       "      <td>0.416667</td>\n",
       "      <td>1.0</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.75</td>\n",
       "      <td>0.018692</td>\n",
       "      <td>1.0</td>\n",
       "      <td>0.75</td>\n",
       "      <td>0.430183</td>\n",
       "      <td>0.5</td>\n",
       "      <td>0.5</td>\n",
       "      <td>1.0</td>\n",
       "      <td>0.116686</td>\n",
       "      <td>0.032907</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.00</td>\n",
       "      <td>1.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.545455</td>\n",
       "      <td>0.666667</td>\n",
       "      <td>0.75</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>0.750000</td>\n",
       "      <td>0.75</td>\n",
       "      <td>0.456066</td>\n",
       "      <td>0.0</td>\n",
       "      <td>1.0</td>\n",
       "      <td>1.0</td>\n",
       "      <td>0.333333</td>\n",
       "      <td>0.333333</td>\n",
       "      <td>1.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.363636</td>\n",
       "      <td>0.4</td>\n",
       "      <td>1.0</td>\n",
       "      <td>0.75</td>\n",
       "      <td>0.6</td>\n",
       "      <td>0.444444</td>\n",
       "      <td>0.75</td>\n",
       "      <td>0.360294</td>\n",
       "      <td>0.049180</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.6</td>\n",
       "      <td>0.6</td>\n",
       "      <td>0.666667</td>\n",
       "      <td>0.03375</td>\n",
       "      <td>0.666667</td>\n",
       "      <td>0.5</td>\n",
       "      <td>0.5</td>\n",
       "      <td>0.333333</td>\n",
       "      <td>0.666667</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.8</td>\n",
       "      <td>0.142807</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.114724</td>\n",
       "      <td>0.172340</td>\n",
       "      <td>1.0</td>\n",
       "      <td>1.00</td>\n",
       "      <td>1.0</td>\n",
       "      <td>1.0</td>\n",
       "      <td>0.434539</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.406196</td>\n",
       "      <td>0.333333</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.333333</td>\n",
       "      <td>0.5</td>\n",
       "      <td>0.375</td>\n",
       "      <td>0.333333</td>\n",
       "      <td>0.666667</td>\n",
       "      <td>0.250000</td>\n",
       "      <td>1.0</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.75</td>\n",
       "      <td>0.457944</td>\n",
       "      <td>0.5</td>\n",
       "      <td>0.25</td>\n",
       "      <td>0.220028</td>\n",
       "      <td>0.5</td>\n",
       "      <td>0.5</td>\n",
       "      <td>1.0</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.75</td>\n",
       "      <td>1.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.636364</td>\n",
       "      <td>0.666667</td>\n",
       "      <td>0.75</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>0.916667</td>\n",
       "      <td>0.75</td>\n",
       "      <td>0.394699</td>\n",
       "      <td>0.0</td>\n",
       "      <td>1.0</td>\n",
       "      <td>1.0</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.333333</td>\n",
       "      <td>1.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.954545</td>\n",
       "      <td>0.4</td>\n",
       "      <td>1.0</td>\n",
       "      <td>1.00</td>\n",
       "      <td>0.6</td>\n",
       "      <td>0.888889</td>\n",
       "      <td>0.50</td>\n",
       "      <td>0.036765</td>\n",
       "      <td>0.098361</td>\n",
       "      <td>1.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.3</td>\n",
       "      <td>0.2</td>\n",
       "      <td>0.666667</td>\n",
       "      <td>0.25750</td>\n",
       "      <td>1.000000</td>\n",
       "      <td>0.5</td>\n",
       "      <td>1.0</td>\n",
       "      <td>1.000000</td>\n",
       "      <td>0.666667</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>1.0</td>\n",
       "      <td>0.080794</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.601951</td>\n",
       "      <td>0.286743</td>\n",
       "      <td>1.0</td>\n",
       "      <td>1.00</td>\n",
       "      <td>1.0</td>\n",
       "      <td>1.0</td>\n",
       "      <td>0.627205</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.586296</td>\n",
       "      <td>0.333333</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.666667</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.250</td>\n",
       "      <td>0.333333</td>\n",
       "      <td>1.000000</td>\n",
       "      <td>0.333333</td>\n",
       "      <td>1.0</td>\n",
       "      <td>0.333333</td>\n",
       "      <td>0.8</td>\n",
       "      <td>0.75</td>\n",
       "      <td>0.046729</td>\n",
       "      <td>0.5</td>\n",
       "      <td>0.50</td>\n",
       "      <td>0.406206</td>\n",
       "      <td>0.5</td>\n",
       "      <td>0.5</td>\n",
       "      <td>1.0</td>\n",
       "      <td>0.228705</td>\n",
       "      <td>0.149909</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.00</td>\n",
       "      <td>1.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.090909</td>\n",
       "      <td>0.666667</td>\n",
       "      <td>0.75</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>0.750000</td>\n",
       "      <td>0.75</td>\n",
       "      <td>0.445002</td>\n",
       "      <td>0.0</td>\n",
       "      <td>1.0</td>\n",
       "      <td>1.0</td>\n",
       "      <td>0.666667</td>\n",
       "      <td>0.666667</td>\n",
       "      <td>1.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.454545</td>\n",
       "      <td>0.4</td>\n",
       "      <td>1.0</td>\n",
       "      <td>0.75</td>\n",
       "      <td>0.6</td>\n",
       "      <td>0.666667</td>\n",
       "      <td>0.50</td>\n",
       "      <td>0.066176</td>\n",
       "      <td>0.163934</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>1.0</td>\n",
       "      <td>1.0</td>\n",
       "      <td>0.333333</td>\n",
       "      <td>0.00000</td>\n",
       "      <td>0.666667</td>\n",
       "      <td>0.5</td>\n",
       "      <td>1.0</td>\n",
       "      <td>0.666667</td>\n",
       "      <td>0.666667</td>\n",
       "      <td>1.000000</td>\n",
       "      <td>1.0</td>\n",
       "      <td>0.255670</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.018114</td>\n",
       "      <td>0.242553</td>\n",
       "      <td>1.0</td>\n",
       "      <td>1.00</td>\n",
       "      <td>1.0</td>\n",
       "      <td>1.0</td>\n",
       "      <td>0.566920</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.529943</td>\n",
       "      <td>0.333333</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.666667</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.375</td>\n",
       "      <td>0.333333</td>\n",
       "      <td>0.666667</td>\n",
       "      <td>0.250000</td>\n",
       "      <td>1.0</td>\n",
       "      <td>0.333333</td>\n",
       "      <td>0.4</td>\n",
       "      <td>0.75</td>\n",
       "      <td>0.084112</td>\n",
       "      <td>0.5</td>\n",
       "      <td>0.50</td>\n",
       "      <td>0.362482</td>\n",
       "      <td>0.5</td>\n",
       "      <td>0.5</td>\n",
       "      <td>1.0</td>\n",
       "      <td>0.469078</td>\n",
       "      <td>0.045704</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.00</td>\n",
       "      <td>1.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.636364</td>\n",
       "      <td>0.666667</td>\n",
       "      <td>0.75</td>\n",
       "      <td>1.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>0.750000</td>\n",
       "      <td>0.75</td>\n",
       "      <td>0.577658</td>\n",
       "      <td>0.0</td>\n",
       "      <td>1.0</td>\n",
       "      <td>1.0</td>\n",
       "      <td>0.333333</td>\n",
       "      <td>0.333333</td>\n",
       "      <td>1.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.363636</td>\n",
       "      <td>0.4</td>\n",
       "      <td>1.0</td>\n",
       "      <td>0.75</td>\n",
       "      <td>0.6</td>\n",
       "      <td>0.555556</td>\n",
       "      <td>0.50</td>\n",
       "      <td>0.323529</td>\n",
       "      <td>0.737705</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.6</td>\n",
       "      <td>0.7</td>\n",
       "      <td>0.666667</td>\n",
       "      <td>0.17000</td>\n",
       "      <td>0.333333</td>\n",
       "      <td>0.5</td>\n",
       "      <td>0.5</td>\n",
       "      <td>0.333333</td>\n",
       "      <td>0.666667</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.6</td>\n",
       "      <td>0.086818</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.434278</td>\n",
       "      <td>0.233224</td>\n",
       "      <td>1.0</td>\n",
       "      <td>0.75</td>\n",
       "      <td>1.0</td>\n",
       "      <td>1.0</td>\n",
       "      <td>0.549026</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.513216</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.666667</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.375</td>\n",
       "      <td>0.333333</td>\n",
       "      <td>0.333333</td>\n",
       "      <td>0.416667</td>\n",
       "      <td>1.0</td>\n",
       "      <td>0.333333</td>\n",
       "      <td>0.8</td>\n",
       "      <td>0.75</td>\n",
       "      <td>0.411215</td>\n",
       "      <td>0.5</td>\n",
       "      <td>0.50</td>\n",
       "      <td>0.406206</td>\n",
       "      <td>0.5</td>\n",
       "      <td>0.5</td>\n",
       "      <td>1.0</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.0</td>\n",
       "      <td>1.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.00</td>\n",
       "      <td>1.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.545455</td>\n",
       "      <td>0.666667</td>\n",
       "      <td>0.75</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "   MSSubClass  MSZoning  LotFrontage  LotArea  Street  Alley  LotShape  \\\n",
       "0    0.750000      0.75     0.461171      0.0     1.0    1.0  0.333333   \n",
       "1    0.750000      0.75     0.456066      0.0     1.0    1.0  0.333333   \n",
       "2    0.916667      0.75     0.394699      0.0     1.0    1.0  0.000000   \n",
       "3    0.750000      0.75     0.445002      0.0     1.0    1.0  0.666667   \n",
       "4    0.750000      0.75     0.577658      0.0     1.0    1.0  0.333333   \n",
       "\n",
       "   LandContour  Utilities  LotConfig  LandSlope  Neighborhood  Condition1  \\\n",
       "0     1.000000        1.0        0.0        0.0      0.863636         0.4   \n",
       "1     0.333333        1.0        0.0        0.0      0.363636         0.4   \n",
       "2     0.333333        1.0        0.0        0.0      0.954545         0.4   \n",
       "3     0.666667        1.0        0.0        0.0      0.454545         0.4   \n",
       "4     0.333333        1.0        0.0        0.0      0.363636         0.4   \n",
       "\n",
       "   Condition2  BldgType  HouseStyle  OverallQual  OverallCond  YearBuilt  \\\n",
       "0         1.0      0.75         0.6     0.777778         0.50   0.014706   \n",
       "1         1.0      0.75         0.6     0.444444         0.75   0.360294   \n",
       "2         1.0      1.00         0.6     0.888889         0.50   0.036765   \n",
       "3         1.0      0.75         0.6     0.666667         0.50   0.066176   \n",
       "4         1.0      0.75         0.6     0.555556         0.50   0.323529   \n",
       "\n",
       "   YearRemodAdd  RoofStyle  RoofMatl  Exterior1st  Exterior2nd  MasVnrType  \\\n",
       "0      0.049180        0.0       0.0          1.0          1.0    0.333333   \n",
       "1      0.049180        0.0       0.0          0.6          0.6    0.666667   \n",
       "2      0.098361        1.0       0.0          0.3          0.2    0.666667   \n",
       "3      0.163934        0.0       0.0          1.0          1.0    0.333333   \n",
       "4      0.737705        0.0       0.0          0.6          0.7    0.666667   \n",
       "\n",
       "   MasVnrArea  ExterQual  ExterCond  Foundation  BsmtQual  BsmtCond  \\\n",
       "0     0.00000   0.666667        0.5         1.0  0.666667  0.666667   \n",
       "1     0.03375   0.666667        0.5         0.5  0.333333  0.666667   \n",
       "2     0.25750   1.000000        0.5         1.0  1.000000  0.666667   \n",
       "3     0.00000   0.666667        0.5         1.0  0.666667  0.666667   \n",
       "4     0.17000   0.333333        0.5         0.5  0.333333  0.666667   \n",
       "\n",
       "   BsmtExposure  BsmtFinType1  BsmtFinSF1  BsmtFinType2  BsmtFinSF2  \\\n",
       "0      0.666667           1.0    0.002835           0.0         0.0   \n",
       "1      0.000000           0.8    0.142807           0.0         0.0   \n",
       "2      0.000000           1.0    0.080794           0.0         0.0   \n",
       "3      1.000000           1.0    0.255670           0.0         0.0   \n",
       "4      0.000000           0.6    0.086818           0.0         0.0   \n",
       "\n",
       "   BsmtUnfSF  TotalBsmtSF  Heating  HeatingQC  CentralAir  Electrical  \\\n",
       "0   0.673479     0.239935      1.0       1.00         1.0         1.0   \n",
       "1   0.114724     0.172340      1.0       1.00         1.0         1.0   \n",
       "2   0.601951     0.286743      1.0       1.00         1.0         1.0   \n",
       "3   0.018114     0.242553      1.0       1.00         1.0         1.0   \n",
       "4   0.434278     0.233224      1.0       0.75         1.0         1.0   \n",
       "\n",
       "   1stFlrSF  2ndFlrSF  LowQualFinSF  GrLivArea  BsmtFullBath  BsmtHalfBath  \\\n",
       "0  0.559760       0.0           0.0   0.523250      0.000000           0.0   \n",
       "1  0.434539       0.0           0.0   0.406196      0.333333           0.0   \n",
       "2  0.627205       0.0           0.0   0.586296      0.333333           0.0   \n",
       "3  0.566920       0.0           0.0   0.529943      0.333333           0.0   \n",
       "4  0.549026       0.0           0.0   0.513216      0.000000           0.0   \n",
       "\n",
       "   FullBath  HalfBath  BedroomAbvGr  KitchenAbvGr  KitchenQual  TotRmsAbvGrd  \\\n",
       "0  0.666667       0.0         0.375      0.333333     0.666667      0.416667   \n",
       "1  0.333333       0.5         0.375      0.333333     0.666667      0.250000   \n",
       "2  0.666667       0.0         0.250      0.333333     1.000000      0.333333   \n",
       "3  0.666667       0.0         0.375      0.333333     0.666667      0.250000   \n",
       "4  0.666667       0.0         0.375      0.333333     0.333333      0.416667   \n",
       "\n",
       "   Functional  Fireplaces  FireplaceQu  GarageType  GarageYrBlt  GarageFinish  \\\n",
       "0         1.0    0.000000          0.0        0.75     0.018692           1.0   \n",
       "1         1.0    0.000000          0.0        0.75     0.457944           0.5   \n",
       "2         1.0    0.333333          0.8        0.75     0.046729           0.5   \n",
       "3         1.0    0.333333          0.4        0.75     0.084112           0.5   \n",
       "4         1.0    0.333333          0.8        0.75     0.411215           0.5   \n",
       "\n",
       "   GarageCars  GarageArea  GarageQual  GarageCond  PavedDrive  WoodDeckSF  \\\n",
       "0        0.75    0.430183         0.5         0.5         1.0    0.116686   \n",
       "1        0.25    0.220028         0.5         0.5         1.0    0.000000   \n",
       "2        0.50    0.406206         0.5         0.5         1.0    0.228705   \n",
       "3        0.50    0.362482         0.5         0.5         1.0    0.469078   \n",
       "4        0.50    0.406206         0.5         0.5         1.0    0.000000   \n",
       "\n",
       "   OpenPorchSF  EnclosedPorch  3SsnPorch  ScreenPorch  PoolArea  PoolQC  \\\n",
       "0     0.032907            0.0        0.0          0.0       0.0     0.0   \n",
       "1     0.000000            0.0        0.0          0.0       0.0     0.0   \n",
       "2     0.149909            0.0        0.0          0.0       0.0     0.0   \n",
       "3     0.045704            0.0        0.0          0.0       0.0     0.0   \n",
       "4     0.000000            0.0        1.0          0.0       0.0     0.0   \n",
       "\n",
       "   Fence  MiscFeature  MiscVal    MoSold  SaleType  SaleCondition  \\\n",
       "0   0.00          1.0      0.0  0.545455  0.666667           0.75   \n",
       "1   0.75          1.0      0.0  0.636364  0.666667           0.75   \n",
       "2   0.00          1.0      0.0  0.090909  0.666667           0.75   \n",
       "3   0.00          1.0      0.0  0.636364  0.666667           0.75   \n",
       "4   0.00          1.0      0.0  0.545455  0.666667           0.75   \n",
       "\n",
       "   LotFrontage_na  MasVnrArea_na  GarageYrBlt_na  \n",
       "0             0.0            0.0             0.0  \n",
       "1             0.0            0.0             0.0  \n",
       "2             0.0            0.0             0.0  \n",
       "3             1.0            0.0             0.0  \n",
       "4             0.0            0.0             0.0  "
      ]
     },
     "execution_count": 2,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# load the train and test set with the engineered variables\n",
    "\n",
    "# we built and saved these datasets in a previous notebook.\n",
    "# If you haven't done so, go ahead and check the previous notebooks (step 2)\n",
    "# to find out how to create these datasets\n",
    "\n",
    "X_train = pd.read_csv('xtrain.csv')\n",
    "X_test = pd.read_csv('xtest.csv')\n",
    "\n",
    "X_train.head()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>SalePrice</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>12.211060</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>11.887931</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>12.675764</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>12.278393</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>12.103486</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "   SalePrice\n",
       "0  12.211060\n",
       "1  11.887931\n",
       "2  12.675764\n",
       "3  12.278393\n",
       "4  12.103486"
      ]
     },
     "execution_count": 3,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# load the target (remember that the target is log transformed)\n",
    "y_train = pd.read_csv('ytrain.csv')\n",
    "y_test = pd.read_csv('ytest.csv')\n",
    "\n",
    "y_train.head()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "['MSSubClass',\n",
       " 'MSZoning',\n",
       " 'LotFrontage',\n",
       " 'LotShape',\n",
       " 'LandContour',\n",
       " 'LotConfig',\n",
       " 'Neighborhood',\n",
       " 'OverallQual',\n",
       " 'OverallCond',\n",
       " 'YearRemodAdd',\n",
       " 'RoofStyle',\n",
       " 'Exterior1st',\n",
       " 'ExterQual',\n",
       " 'Foundation',\n",
       " 'BsmtQual',\n",
       " 'BsmtExposure',\n",
       " 'BsmtFinType1',\n",
       " 'HeatingQC',\n",
       " 'CentralAir',\n",
       " '1stFlrSF',\n",
       " '2ndFlrSF',\n",
       " 'GrLivArea',\n",
       " 'BsmtFullBath',\n",
       " 'HalfBath',\n",
       " 'KitchenQual',\n",
       " 'TotRmsAbvGrd',\n",
       " 'Functional',\n",
       " 'Fireplaces',\n",
       " 'FireplaceQu',\n",
       " 'GarageFinish',\n",
       " 'GarageCars',\n",
       " 'GarageArea',\n",
       " 'PavedDrive',\n",
       " 'WoodDeckSF',\n",
       " 'ScreenPorch',\n",
       " 'SaleCondition']"
      ]
     },
     "execution_count": 4,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# load the pre-selected features\n",
    "# ==============================\n",
    "\n",
    "# we selected the features in the previous notebook (step 3)\n",
    "\n",
    "# if you haven't done so, go ahead and visit the previous notebook\n",
    "# to find out how to select the features\n",
    "\n",
    "features = pd.read_csv('selected_features.csv')\n",
    "features = features['0'].to_list() \n",
    "\n",
    "# display final feature set\n",
    "features"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {},
   "outputs": [],
   "source": [
    "# reduce the train and test set to the selected features\n",
    "\n",
    "X_train = X_train[features]\n",
    "X_test = X_test[features]"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Regularised linear regression: Lasso\n",
    "\n",
    "Remember to set the seed."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "Lasso(alpha=0.001, random_state=0)"
      ]
     },
     "execution_count": 6,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# set up the model\n",
    "# remember to set the random_state / seed\n",
    "\n",
    "lin_model = Lasso(alpha=0.001, random_state=0)\n",
    "\n",
    "# train the model\n",
    "\n",
    "lin_model.fit(X_train, y_train)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "train mse: 781396538\n",
      "train rmse: 27953\n",
      "train r2: 0.8748530463468015\n",
      "\n",
      "test mse: 1060767982\n",
      "test rmse: 32569\n",
      "test r2: 0.8456417073258413\n",
      "\n",
      "Average house price:  163000\n"
     ]
    }
   ],
   "source": [
    "# evaluate the model:\n",
    "# ====================\n",
    "\n",
    "# remember that we log transformed the output (SalePrice)\n",
    "# in our feature engineering notebook (step 2).\n",
    "\n",
    "# In order to get the true performance of the Lasso\n",
    "# we need to transform both the target and the predictions\n",
    "# back to the original house prices values.\n",
    "\n",
    "# We will evaluate performance using the mean squared error and\n",
    "# the root of the mean squared error and r2\n",
    "\n",
    "# make predictions for train set\n",
    "pred = lin_model.predict(X_train)\n",
    "\n",
    "# determine mse, rmse and r2\n",
    "print('train mse: {}'.format(int(\n",
    "    mean_squared_error(np.exp(y_train), np.exp(pred)))))\n",
    "print('train rmse: {}'.format(int(\n",
    "    mean_squared_error(np.exp(y_train), np.exp(pred), squared=False))))\n",
    "print('train r2: {}'.format(\n",
    "    r2_score(np.exp(y_train), np.exp(pred))))\n",
    "print()\n",
    "\n",
    "# make predictions for test set\n",
    "pred = lin_model.predict(X_test)\n",
    "\n",
    "# determine mse, rmse and r2\n",
    "print('test mse: {}'.format(int(\n",
    "    mean_squared_error(np.exp(y_test), np.exp(pred)))))\n",
    "print('test rmse: {}'.format(int(\n",
    "    mean_squared_error(np.exp(y_test), np.exp(pred), squared=False))))\n",
    "print('test r2: {}'.format(\n",
    "    r2_score(np.exp(y_test), np.exp(pred))))\n",
    "print()\n",
    "\n",
    "print('Average house price: ', int(np.exp(y_train).median()))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "Text(0.5, 1.0, 'Evaluation of Lasso Predictions')"
      ]
     },
     "execution_count": 8,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "# let's evaluate our predictions respect to the real sale price\n",
    "plt.scatter(y_test, lin_model.predict(X_test))\n",
    "plt.xlabel('True House Price')\n",
    "plt.ylabel('Predicted House Price')\n",
    "plt.title('Evaluation of Lasso Predictions')"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "We can see that our model is doing a pretty good job at estimating house prices."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>SalePrice</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>12.209188</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>11.798104</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>11.608236</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>12.165251</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>11.385092</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>...</th>\n",
       "      <td>...</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>141</th>\n",
       "      <td>11.884489</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>142</th>\n",
       "      <td>12.287653</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>143</th>\n",
       "      <td>11.921718</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>144</th>\n",
       "      <td>11.598727</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>145</th>\n",
       "      <td>12.017331</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "<p>146 rows × 1 columns</p>\n",
       "</div>"
      ],
      "text/plain": [
       "     SalePrice\n",
       "0    12.209188\n",
       "1    11.798104\n",
       "2    11.608236\n",
       "3    12.165251\n",
       "4    11.385092\n",
       "..         ...\n",
       "141  11.884489\n",
       "142  12.287653\n",
       "143  11.921718\n",
       "144  11.598727\n",
       "145  12.017331\n",
       "\n",
       "[146 rows x 1 columns]"
      ]
     },
     "execution_count": 9,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "y_test.reset_index(drop=True)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 10,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "0      12.148226\n",
       "1      11.919326\n",
       "2      11.677107\n",
       "3      12.304289\n",
       "4      11.447473\n",
       "         ...    \n",
       "141    11.775100\n",
       "142    12.316546\n",
       "143    11.955957\n",
       "144    11.757571\n",
       "145    12.072691\n",
       "Length: 146, dtype: float64"
      ]
     },
     "execution_count": 10,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# let's evaluate the distribution of the errors: \n",
    "# they should be fairly normally distributed\n",
    "\n",
    "y_test.reset_index(drop=True, inplace=True)\n",
    "\n",
    "preds = pd.Series(lin_model.predict(X_test))\n",
    "\n",
    "preds"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 11,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "# let's evaluate the distribution of the errors: \n",
    "# they should be fairly normally distributed\n",
    "\n",
    "errors = y_test['SalePrice'] - preds\n",
    "errors.hist(bins=30)\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "The distribution of the errors follows quite closely a gaussian distribution. That suggests that our model is doing a good job as well."
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Feature importance"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 12,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "Text(0.5, 1.0, 'Feature Importance')"
      ]
     },
     "execution_count": 12,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 1296x432 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "# Finally, just for fun, let's look at the feature importance\n",
    "\n",
    "importance = pd.Series(np.abs(lin_model.coef_.ravel()))\n",
    "importance.index = features\n",
    "importance.sort_values(inplace=True, ascending=False)\n",
    "importance.plot.bar(figsize=(18,6))\n",
    "plt.ylabel('Lasso Coefficients')\n",
    "plt.title('Feature Importance')"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Save the Model"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 13,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "['linear_regression.joblib']"
      ]
     },
     "execution_count": 13,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# we are happy to our model, so we save it to be able\n",
    "# to score new data\n",
    "\n",
    "joblib.dump(lin_model, 'linear_regression.joblib') "
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# Additional Resources\n",
    "\n",
    "\n",
    "## Feature Engineering\n",
    "\n",
    "- [Feature Engineering for Machine Learning](https://www.udemy.com/course/feature-engineering-for-machine-learning/?referralCode=A855148E05283015CF06) - Online Course\n",
    "- [Packt Feature Engineering Cookbook](https://www.packtpub.com/data/python-feature-engineering-cookbook) - Book\n",
    "- [Feature Engineering for Machine Learning: A comprehensive Overview](https://trainindata.medium.com/feature-engineering-for-machine-learning-a-comprehensive-overview-a7ad04c896f8) - Article\n",
    "- [Practical Code Implementations of Feature Engineering for Machine Learning with Python](https://towardsdatascience.com/practical-code-implementations-of-feature-engineering-for-machine-learning-with-python-f13b953d4bcd) - Article\n",
    "\n",
    "## Feature Selection\n",
    "\n",
    "- [Feature Selection for Machine Learning](https://www.udemy.com/course/feature-selection-for-machine-learning/?referralCode=186501DF5D93F48C4F71) - Online Course\n",
    "- [Feature Selection for Machine Learning: A comprehensive Overview](https://trainindata.medium.com/feature-selection-for-machine-learning-a-comprehensive-overview-bd571db5dd2d) - Article\n",
    "\n",
    "## Machine Learning\n",
    "\n",
    "- [Best Resources to Learn Machine Learning](https://trainindata.medium.com/find-out-the-best-resources-to-learn-machine-learning-cd560beec2b7) - Article\n",
    "- [Machine Learning with Imbalanced Data](https://www.udemy.com/course/machine-learning-with-imbalanced-data/?referralCode=F30537642DA57D19ED83) - Online Course"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": []
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "feml",
   "language": "python",
   "name": "feml"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.8.2"
  },
  "toc": {
   "base_numbering": 1,
   "nav_menu": {},
   "number_sections": true,
   "sideBar": true,
   "skip_h1_title": false,
   "title_cell": "Table of Contents",
   "title_sidebar": "Contents",
   "toc_cell": false,
   "toc_position": {
    "height": "583px",
    "left": "0px",
    "right": "1324px",
    "top": "107px",
    "width": "212px"
   },
   "toc_section_display": "block",
   "toc_window_display": true
  }
 },
 "nbformat": 4,
 "nbformat_minor": 2
}
